home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / MiscKit1.7.1 / MiscKit / Examples / qlipo / cpu.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-04-17  |  7.9 KB  |  374 lines

  1. /*        Written by Darcy Brockbank.
  2. //        Copyright (c) 1995 by Darcy Brockbank.  All rights reserved.
  3. //
  4. //        This notice may not be removed from this source code.
  5. //
  6. //    This object is included in the MiscKit by permission from the author
  7. //    and its use is governed by the MiscKit license, found in the file
  8. //    "LICENSE.rtf" in the MiscKit distribution.  Please refer to that file
  9. //    for a list of all applicable permissions and restrictions.
  10. */    
  11.  
  12. #include "cpu.h"
  13.  
  14. /* 
  15.  * I am so ashamed, but I had to rewrite it in order to keep it 
  16.  * portable and free. What a gross mess.
  17.  */
  18.  
  19. int 
  20. cpu_type(const char *string)
  21. {
  22.     int i;
  23.     if (!string) return CPU_TYPE_ANY;
  24.     for(i=CPU_TYPE_UNKNOWN;cpus[i];i++){
  25.     if (strcmp(cpus[i],string)==0){
  26.         return i-1;
  27.     }
  28.     }
  29.     return CPU_TYPE_UNKNOWN;
  30. }
  31.  
  32. const char * 
  33. arch_from_type(int type)
  34. {
  35.     return (type>=CPU_TYPE_MAX || type<CPU_TYPE_ANY) ?
  36.      cpus[CPU_TYPE_UNKNOWN] : cpus[type+1];
  37. }
  38.  
  39. static const char * 
  40. get_any(int t)
  41. {
  42.     switch(t){
  43.     default:
  44.     case CPU_SUBTYPE_MULTIPLE: 
  45.     return "CPU_SUBTYPE_MULTIPLE";
  46.     case CPU_SUBTYPE_LITTLE_ENDIAN: 
  47.     return "CPU_SUBTYPE_LITTLE_ENDIAN";
  48.     case CPU_SUBTYPE_BIG_ENDIAN: 
  49.     return "CPU_SUBTYPE_BIG_ENDIAN";
  50.     }
  51. }
  52.  
  53.  
  54. static const char *
  55. get_vax(int t)
  56. {
  57.     switch(t){
  58.     default:
  59.     case CPU_SUBTYPE_VAX_ALL: 
  60.     return("CPU_SUBTYPE_VAX_ALL");
  61.     case CPU_SUBTYPE_VAX780: 
  62.     return("CPU_SUBTYPE_VAX780");
  63.     case CPU_SUBTYPE_VAX785: 
  64.     return("CPU_SUBTYPE_VAX785");
  65.     case CPU_SUBTYPE_VAX750: 
  66.     return("CPU_SUBTYPE_VAX750");
  67.     case CPU_SUBTYPE_VAX730: 
  68.     return("CPU_SUBTYPE_VAX730");
  69.     case CPU_SUBTYPE_UVAXI: 
  70.     return("CPU_SUBTYPE_UVAXI");
  71.     case CPU_SUBTYPE_UVAXII: 
  72.     return("CPU_SUBTYPE_UVAXII");
  73.     case CPU_SUBTYPE_VAX8200: 
  74.     return("CPU_SUBTYPE_VAX8200");
  75.     case CPU_SUBTYPE_VAX8500: 
  76.     return("CPU_SUBTYPE_VAX8500");
  77.     case CPU_SUBTYPE_VAX8600: 
  78.     return("CPU_SUBTYPE_VAX8600");
  79.     case CPU_SUBTYPE_VAX8650: 
  80.     return("CPU_SUBTYPE_VAX8650");
  81.     case CPU_SUBTYPE_VAX8800: 
  82.     return("CPU_SUBTYPE_VAX8800");
  83.     case CPU_SUBTYPE_UVAXIII: 
  84.     return("CPU_SUBTYPE_UVAXIII");
  85.     }
  86. }
  87.  
  88. static const char *
  89. get_romp(int t)
  90. {
  91.     switch(t){
  92.     default:
  93.     case CPU_SUBTYPE_RT_ALL: 
  94.     return("CPU_SUBTYPE_RT_ALL");
  95.     case CPU_SUBTYPE_RT_PC:
  96.     return("CPU_SUBTYPE_RT_PC");
  97.     case CPU_SUBTYPE_RT_APC: 
  98.     return("CPU_SUBTYPE_RT_APC");
  99.     case CPU_SUBTYPE_RT_135: 
  100.     return("CPU_SUBTYPE_RT_135");
  101.     }
  102. }
  103.  
  104. static const char *
  105. get_mmax(int t)
  106. {
  107.     switch(t){
  108.     default:
  109.     case CPU_SUBTYPE_MMAX_ALL:
  110.     return("CPU_SUBTYPE_MMAX_ALL");
  111.     case CPU_SUBTYPE_MMAX_JPC: 
  112.     return("CPU_SUBTYPE_MMAX_JPC");
  113. /*    case CPU_SUBTYPE_MMAX_DPC: */
  114. /*    return("CPU_SUBTYPE_MMAX_DPC");*/
  115.     case CPU_SUBTYPE_SQT: 
  116.     return("CPU_SUBTYPE_SQT");
  117.     case CPU_SUBTYPE_MMAX_APC_FPU: 
  118.     return("CPU_SUBTYPE_MMAX_APC_FPU");
  119.     case CPU_SUBTYPE_MMAX_APC_FPA: 
  120.     return("CPU_SUBTYPE_MMAX_APC_FPA");
  121.     case CPU_SUBTYPE_MMAX_XPC: 
  122.     return("CPU_SUBTYPE_MMAX_XPC");
  123.     }
  124. }
  125.  
  126. static const char *
  127. get_intel(int t)
  128. {
  129.     switch(t){
  130.     default:
  131. /*    case CPU_SUBTYPE_386: */
  132.     case CPU_SUBTYPE_I386_ALL: 
  133.     return("CPU_SUBTYPE_I386_ALL");
  134.     return("CPU_SUBTYPE_386");
  135.     case CPU_SUBTYPE_486: 
  136.     return("CPU_SUBTYPE_486");
  137.     case CPU_SUBTYPE_486SX: 
  138.     return("CPU_SUBTYPE_486SX");
  139.     case CPU_SUBTYPE_586: 
  140.     return("CPU_SUBTYPE_586");
  141.     case CPU_SUBTYPE_586SX: 
  142.     return("CPU_SUBTYPE_586SX");
  143.     }
  144. }
  145.  
  146. static const char * 
  147. get_mips(int t)
  148. {
  149.     switch(t){
  150.     default:
  151.     case CPU_SUBTYPE_MIPS_ALL: 
  152.     return("CPU_SUBTYPE_MIPS_ALL");
  153.     case CPU_SUBTYPE_MIPS_R2300: 
  154.     return("CPU_SUBTYPE_MIPS_R2300");
  155.     case CPU_SUBTYPE_MIPS_R2600: 
  156.     return("CPU_SUBTYPE_MIPS_R2600");
  157.     case CPU_SUBTYPE_MIPS_R2800: 
  158.     return("CPU_SUBTYPE_MIPS_R2800");
  159.     case CPU_SUBTYPE_MIPS_R2000a: 
  160.     return("CPU_SUBTYPE_MIPS_R2000a");
  161.     }
  162. }
  163.  
  164. static const char *
  165. get_m68k(int t)
  166. {
  167.     switch(t){
  168.     default:
  169.     case CPU_SUBTYPE_MC680x0_ALL: 
  170.     return("CPU_SUBTYPE_MC680x0_ALL    ");
  171. /*    case CPU_SUBTYPE_MC68030: */
  172. /*    return("CPU_SUBTYPE_MC68030");*/
  173.     case CPU_SUBTYPE_MC68040: 
  174.     return("CPU_SUBTYPE_MC68040");
  175.     case CPU_SUBTYPE_MC68030_ONLY: 
  176.     return("CPU_SUBTYPE_MC68030_ONLY");
  177.     }
  178. }
  179.  
  180. static const char *
  181. get_hppa(int t)
  182. {
  183.     switch(t){
  184.     default:
  185.     case CPU_SUBTYPE_HPPA_ALL: 
  186. /*    case CPU_SUBTYPE_HPPA_7100: */
  187.     return("CPU_SUBTYPE_HPPA_ALL");
  188.     return("CPU_SUBTYPE_HPPA_7100");
  189.     case CPU_SUBTYPE_HPPA_7100LC: 
  190.     return("CPU_SUBTYPE_HPPA_7100LC");
  191.     }
  192. }
  193.  
  194. static const char * 
  195. get_arm(int t)
  196. {
  197.     switch(t){
  198.     default:
  199.     case CPU_SUBTYPE_ARM_ALL: 
  200.     return("CPU_SUBTYPE_ARM_ALL");
  201.     case CPU_SUBTYPE_ARM_A500_ARCH: 
  202.     return("CPU_SUBTYPE_ARM_A500_ARCH");
  203.     case CPU_SUBTYPE_ARM_A500: 
  204.     return("CPU_SUBTYPE_ARM_A500");
  205.     case CPU_SUBTYPE_ARM_A440: 
  206.     return("CPU_SUBTYPE_ARM_A440");
  207.     case CPU_SUBTYPE_ARM_M4: 
  208.     return("CPU_SUBTYPE_ARM_M4");
  209.     case CPU_SUBTYPE_ARM_A680: 
  210.     return("CPU_SUBTYPE_ARM_A680");
  211.     }
  212. }
  213.  
  214. static const char *
  215. get_m88k(int t)
  216. {
  217.     switch(t){
  218.     default:
  219.     case CPU_SUBTYPE_MC88000_ALL: 
  220.     return("CPU_SUBTYPE_MC88000_ALL");
  221.     case CPU_SUBTYPE_MC88100:
  222.     return("CPU_SUBTYPE_MC88100");
  223.     case CPU_SUBTYPE_MC88110: 
  224.     return("CPU_SUBTYPE_MC88110");
  225.     }
  226. }
  227.  
  228. static const char *
  229. get_ppc(int t)
  230. {
  231.     switch(t){
  232.     default:
  233.     case CPU_SUBTYPE_MC98000_ALL: 
  234.     return("CPU_SUBTYPE_MC98000_ALL");
  235.     case CPU_SUBTYPE_MC98601: 
  236.     return("CPU_SUBTYPE_MC98601");
  237.     }
  238. }
  239.  
  240. static const char *
  241. get_i860(int t)
  242. {
  243.     switch(t){
  244.     default:
  245.     case CPU_SUBTYPE_I860_ALL: 
  246.     return("CPU_SUBTYPE_I860_ALL");
  247.     case CPU_SUBTYPE_I860_860: 
  248.     return("CPU_SUBTYPE_I860_860");
  249.     }
  250. }
  251.  
  252. static const char *
  253. get_i680(int t)
  254. {
  255.     switch(t){
  256.     default:
  257.     case CPU_SUBTYPE_I860_LITTLE_ALL: 
  258.     return("CPU_SUBTYPE_I860_LITTLE_ALL");
  259.     case CPU_SUBTYPE_I860_LITTLE: 
  260.     return("CPU_SUBTYPE_I860_LITTLE");
  261.     }
  262. }
  263.  
  264. static const char *
  265. get_sparc(int t)
  266. {
  267.     switch(t){
  268.     default:
  269.     case CPU_SUBTYPE_SPARC_ALL: 
  270.     return("CPU_SUBTYPE_SPARC_ALL");
  271.     }
  272. }
  273.  
  274.  
  275. static const char *
  276. get_rs6k(int t)
  277. {
  278.     switch(t){
  279.     default:
  280.     case CPU_SUBTYPE_RS6000_ALL: 
  281.     return("CPU_SUBTYPE_RS6000_ALL");
  282.     case CPU_SUBTYPE_RS6000: 
  283.     return("CPU_SUBTYPE_RS6000");
  284.     }
  285. }
  286.  
  287.  
  288. const char *
  289. get_cpusubtype(int cputype, int t)
  290. {
  291.     switch(cputype){
  292.     case CPU_TYPE_ANY: 
  293.     return get_any(t);
  294.     case CPU_TYPE_VAX: 
  295.     return get_vax(t);
  296.     case CPU_TYPE_ROMP: 
  297.     return get_romp(t);
  298.     case CPU_TYPE_NS32032: 
  299.     return get_mmax(t);
  300.     case CPU_TYPE_NS32332: 
  301.     return get_mmax(t);
  302.     case CPU_TYPE_MC680x0: 
  303.     return get_m68k(t);
  304.     case CPU_TYPE_I386: 
  305.     return get_intel(t);
  306.     case CPU_TYPE_MIPS: 
  307.     return get_mips(t);
  308.     case CPU_TYPE_NS32532: 
  309.     return get_mmax(t);
  310.     case CPU_TYPE_HPPA: 
  311.     return get_hppa(t);
  312.     case CPU_TYPE_ARM: 
  313.     return get_arm(t);
  314.     case CPU_TYPE_MC88000: 
  315.     return get_m88k(t);
  316.     case CPU_TYPE_SPARC: 
  317.     return get_sparc(t);
  318.     case CPU_TYPE_I860: 
  319.     return get_i860(t);
  320.     case CPU_TYPE_I860_LITTLE: 
  321.     return get_i680(t);
  322.     case CPU_TYPE_RS6000: 
  323.     return get_rs6k(t);
  324.     case CPU_TYPE_MC98000: 
  325.     return get_ppc(t);
  326.     default:
  327.     return "unknown";
  328.     }
  329. }
  330.  
  331. const char *
  332. get_cputype(int type)
  333. {
  334.     switch(type){
  335.     case CPU_TYPE_ANY: 
  336.     return "CPU_TYPE_ANY";
  337.     case CPU_TYPE_VAX: 
  338.     return "CPU_TYPE_VAX";
  339.     case CPU_TYPE_ROMP: 
  340.     return "CPU_TYPE_ROMP";
  341.     case CPU_TYPE_NS32032: 
  342.     return "CPU_TYPE_NS32032";
  343.     case CPU_TYPE_NS32332: 
  344.     return "CPU_TYPE_NS32332";
  345.     case CPU_TYPE_MC680x0: 
  346.     return "CPU_TYPE_MC680x0";
  347.     case CPU_TYPE_I386: 
  348.     return "CPU_TYPE_I386";
  349.     case CPU_TYPE_MIPS: 
  350.     return "CPU_TYPE_MIPS";
  351.     case CPU_TYPE_NS32532: 
  352.     return "CPU_TYPE_MMAX";
  353.     case CPU_TYPE_HPPA: 
  354.     return "CPU_TYPE_HPPA";
  355.     case CPU_TYPE_ARM: 
  356.     return "CPU_TYPE_ARM";
  357.     case CPU_TYPE_MC88000: 
  358.     return "CPU_TYPE_MC88000";
  359.     case CPU_TYPE_SPARC: 
  360.     return "CPU_TYPE_SPARC";
  361.     case CPU_TYPE_I860: 
  362.     return "CPU_TYPE_I860";
  363.     case CPU_TYPE_I860_LITTLE: 
  364.     return "CPU_TYPE_I860_LITTLE";
  365.     case CPU_TYPE_RS6000: 
  366.     return "CPU_TYPE_RS6000";
  367.     case CPU_TYPE_MC98000: 
  368.     return "CPU_TYPE_MC98000";
  369.     default:
  370.     return "CPU_TYPE_unknown";
  371.     }
  372. }
  373.  
  374.